/**
 * 路由导航守卫
 * @function
 */
import { store } from '@s';
import { GenerateRoutes } from '@/hooks/useInfo.hooks';

//进度条
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
NProgress.configure({
	easing: 'ease', // 动画方式
	speed: 500, // 递增进度条的速度
	showSpinner: true, // 是否显示加载ico
	trickleSpeed: 200, // 自动递增间隔
	minimum: 0.3 // 初始化时的最小百分比
});

/**
 * 获取版本号
 */
import versionUpdate from './versionUpdate';

/**
 * 白名单
 */
export const whiteList = ['/login'];

/**
 * @description: 全局路由拦截
 * @param {string} pathname 当前路由路径
 * @param {object} meta 当前路由自定义meta字段
 * @return {string} 需要跳转到其他页时，就返回一个该页的path路径，或返回resolve该路径的promise对象
 */
let one = true;
export default function guarder({ pathname, meta }) {
	if (one) {
		one = false;
		NProgress.start();

		//判断当前代码版本是否与服务器中代码版本一致，如不一致则刷新页面获取最新
		versionUpdate();

		// 动态修改页面title
		if (meta?.title !== undefined) document.title = meta.title;

		const {
			base: { token },
			user: { queryRoutes }
		} = store.getState();

		// 判断登录 && 没有在免登录白名单，跳转登录页面
		if (!token && !whiteList.includes(pathname)) return '/login';

		// 路由未请求成功 处理 routes matched location "/system/config" 的问题
		if (token && !queryRoutes) return GenerateRoutes();

		setTimeout(() => {
			NProgress.done();
			one = true;
		}, 10);
	}
}
